﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using br.com.nrtech.ccb.bot.bll;

namespace br.com.nrtech.ccb.bot.ui.cidades
{
    public partial class Form1 : Form
    {
        ArrayList listaIgrejas;

        String versao = "";
        String central = "";
        String pais = "";
        String cidade = "";
        String uf = "";
        String cep = "";
        String bairro = "";
        String logradouro = "";
        String diasCulto = "";
        String rjm = "";
        bool continuar = false;

        public Form1()
        {
            InitializeComponent();
            listaIgrejas = new ArrayList();
            Conexao.conectar();
        }

        public void startTimer()
        {
            timer1.Enabled = true;
            timer1.Start();
            continuar = false;
        }

        public void stopTimer()
        {
            timer1.Stop();
            timer1.Enabled = false;
            continuar = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            try
            {
                string[] lines = File.ReadAllLines(@"C:\Projetos\ccb\cidades.txt");
                foreach (string line in lines)
                    listBox1.Items.Add(line);

                String url;
                HtmlElement tabela;
                HtmlElementCollection divs;
                int contagem = 0;

                string[] infoIgreja;
                int indicePagina;

                int indicePais = 3;
                //System.IO.File.AppendAllText(@"c:\projetos\ccb\igrejas.csv", @"VERSÃO;CENTRAL;PAÍS;CIDADE;UF;CEP;BAIRRO;ENDEREÇO;DIAS DE CULTO;RJM;" + "\n", Encoding.UTF8);
                foreach (String site in lines)
                {
                    indicePagina = 1;
                    //if (!site.Contains("Buenos")) continue;

                    listBox1.SetSelected(listBox1.Items.IndexOf(site), true);
                    tabela = null;

                    do
                    {
                        url = @site + "&pag=" + indicePagina;
                        lbSite.Text = listBox1.Items.IndexOf(site) + " de " + lines.Length + " (" +
                            @tbURL.Text + @url + ")";
                        
                        statusNaveg.Text = @tbURL.Text + @url;

                        webBrowser1.Navigate(@tbURL.Text + @url);
                        startTimer();
                        while (webBrowser1.ReadyState != WebBrowserReadyState.Complete && !continuar)
                            Application.DoEvents();
                        stopTimer();

                        tabela = webBrowser1.Document.GetElementById("resultado_relarorio");
                        if (tabela != null)
                        {
                            indicePagina++;
                            divs = webBrowser1.Document.GetElementsByTagName("div");
                            contagem = 0;

                            foreach (HtmlElement div in divs)
                            {
                                if (div.GetAttribute("id").Equals("dados_igreja"))
                                {
                                    infoIgreja = div.InnerText.Split(new string[] { "\r\n" }, StringSplitOptions.None);
                                    if (infoIgreja.Length > 0)
                                    {
                                        versao = ";";
                                        central = ";";
                                        pais = ";";
                                        cidade = ";";
                                        uf = ";";
                                        cep = ";";
                                        bairro = ";";
                                        logradouro = ";";
                                        diasCulto = ";";
                                        rjm = ";";

                                        versao = infoIgreja[0].Replace("Versao ", "") + ";";

                                        if (infoIgreja.Length > 2)
                                        {
                                            central = (infoIgreja[2].Equals("CENTRAL") ? "True" : "False") + ";";
                                            indicePais = infoIgreja[2].Equals("CENTRAL") ? 3 : 2;
                                        }

                                        if (infoIgreja.Length > indicePais)
                                        {
                                            pais = infoIgreja[indicePais].Replace("País: ", "") + ";";

                                            if (infoIgreja.Length > indicePais + 1)
                                            {
                                                cidade = infoIgreja[indicePais + 1].Substring(0, infoIgreja[indicePais + 1].IndexOf("/") - 1) + ";";
                                                uf = infoIgreja[indicePais + 1].Substring(infoIgreja[indicePais + 1].IndexOf("/") + 2) + ";";
                                            }

                                            if (infoIgreja.Length > indicePais + 2)
                                            {
                                                if (infoIgreja[indicePais + 2].Length >= 9)
                                                    cep = infoIgreja[indicePais + 2].Replace("Cep: ", "").Substring(0, 9) + ";";
                                                else
                                                    cep = infoIgreja[indicePais + 2].Replace("Cep: ", "").Substring(0) + ";";

                                                if (infoIgreja[indicePais + 2].IndexOf(" - ") > 0)
                                                    bairro = infoIgreja[indicePais + 2].Replace("Cep: ", "").Substring(infoIgreja[indicePais + 2].IndexOf(" - ") - 2) + ";";
                                            }

                                            if (infoIgreja.Length > indicePais + 3)
                                            {
                                                if (!infoIgreja[indicePais + 3].Contains("Dia de culto"))
                                                    logradouro = infoIgreja[indicePais + 3] + ";";
                                            }
                                        }

                                        foreach (String informacao in infoIgreja)
                                        {
                                            if (informacao.Contains("Dia de culto"))
                                                diasCulto = informacao.Replace("Dia de culto: ", "") + ";";
                                            if (informacao.Contains("RJM"))
                                                rjm = informacao.Replace("RJM: ", "") + ";";
                                        }
                                    }
                                    listaIgrejas.Add(versao + central + pais + cidade + uf + cep + bairro + logradouro + diasCulto + rjm);
                                    //System.IO.File.AppendAllText(@"c:\projetos\igrejas.csv", versao + central + pais + cidade + uf + cep + bairro + logradouro + diasCulto + rjm + "\n", Encoding.UTF8);

                                    montaIgreja();

                                    contagem++;
                                }
                            }

                            lbIgrejas.Text = contagem.ToString();
                        }
                    } while (tabela != null);







                    do
                    {
                        url = @site + "&pag=" + indicePagina;
                        lbSite.Text = listBox1.Items.IndexOf(site) + " de " + lines.Length + " (" +
                            @tbURL.Text + @url + ")";

                        statusNaveg.Text = @tbURL.Text + @url;

                        webBrowser1.Navigate(@tbURL.Text + @url + @"&tsda");
                        startTimer();
                        while (webBrowser1.ReadyState != WebBrowserReadyState.Complete && !continuar)
                            Application.DoEvents();

                        stopTimer();

                        tabela = webBrowser1.Document.GetElementById("resultado_relarorio");
                        if (tabela != null)
                        {
                            indicePagina++;
                            divs = webBrowser1.Document.GetElementsByTagName("div");
                            contagem = 0;

                            foreach (HtmlElement div in divs)
                            {
                                if (div.GetAttribute("id").Equals("dados_igreja"))
                                {
                                    infoIgreja = div.InnerText.Split(new string[] { "\r\n" }, StringSplitOptions.None);
                                    if (infoIgreja.Length > 0)
                                    {
                                        versao = ";";
                                        central = ";";
                                        pais = ";";
                                        cidade = ";";
                                        uf = ";";
                                        cep = ";";
                                        bairro = ";";
                                        logradouro = ";";
                                        diasCulto = ";";
                                        rjm = ";";

                                        versao = infoIgreja[0].Replace("Versao ", "") + ";";

                                        if (infoIgreja.Length > 2)
                                        {
                                            central = (infoIgreja[2].Equals("CENTRAL") ? "True" : "False") + ";";
                                            indicePais = infoIgreja[2].Equals("CENTRAL") ? 3 : 2;
                                        }

                                        if (infoIgreja.Length > indicePais)
                                        {
                                            pais = infoIgreja[indicePais].Replace("País: ", "") + ";";

                                            if (infoIgreja.Length > indicePais + 1)
                                            {
                                                cidade = infoIgreja[indicePais + 1].Substring(0, infoIgreja[indicePais + 1].IndexOf("/") - 1) + ";";
                                                uf = infoIgreja[indicePais + 1].Substring(infoIgreja[indicePais + 1].IndexOf("/") + 2) + ";";
                                            }

                                            if (infoIgreja.Length > indicePais + 2)
                                            {
                                                cep = infoIgreja[indicePais + 2].Replace("Cep: ", "").Substring(0, 9) + ";";

                                                if (infoIgreja[indicePais + 2].IndexOf(" - ") > 0)
                                                    bairro = infoIgreja[indicePais + 2].Replace("Cep: ", "").Substring(infoIgreja[indicePais + 2].IndexOf(" - ") - 2) + ";";
                                            }

                                            if (infoIgreja.Length > indicePais + 3)
                                            {
                                                if (!infoIgreja[indicePais + 3].Contains("Dia de culto"))
                                                    logradouro = infoIgreja[indicePais + 3] + ";";
                                            }
                                        }

                                        foreach (String informacao in infoIgreja)
                                        {
                                            if (informacao.Contains("Dia de culto"))
                                                diasCulto = informacao.Replace("Dia de culto: ", "") + ";";
                                            if (informacao.Contains("RJM"))
                                                rjm = informacao.Replace("RJM: ", "") + ";";
                                        }
                                    }

                                    moIgreja igrejaProcurar = new moIgreja();
                                    igrejaProcurar.cep = cep;
                                    igrejaProcurar.endereco = logradouro;

                                    int idIgreja = daoIgreja.igrejaExiste(igrejaProcurar);
                                    if (idIgreja > -1)
                                    {
                                        daoIgreja.atualizaTSDA(idIgreja, true);
                                    }
                                }
                            }

                            lbIgrejas.Text = contagem.ToString();
                        }
                    } while (tabela != null);





















                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {                
                //foreach (String igreja in listaIgrejas)
                //{
                //    System.IO.File.AppendAllText(@"c:\projetos\igrejas.csv", igreja + "\n", Encoding.UTF8);
                //}
            }

        }

        public void montaIgreja()
        {
            moIgreja novaIgreja = new moIgreja();
            novaIgreja.bairro = bairro.Replace(";", "");
            novaIgreja.central = central == "S";
            novaIgreja.cep = cep.Replace(";", "");
            novaIgreja.diasCulto = diasCulto.Replace(";", "");
            novaIgreja.dtAlt = DateTime.Now;
            novaIgreja.dtCad = DateTime.Now;
            novaIgreja.endereco = logradouro.Replace(";", "");
            novaIgreja.pais = pais.Replace(";", "");
            novaIgreja.rjm = rjm.Replace(";", "");
            novaIgreja.uf = uf.Replace(";", "");
            novaIgreja.versao = versao.Replace(";", "");
            novaIgreja.cidade = cidade.Replace(";", "");

            daoIgreja.gravaIgreja(novaIgreja);
        }

        private void statusStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {

        }

        private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
        {
            e.Cancel = true;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            continuar = true;
            timer1.Enabled = false;
        }
    }
}
